package a_doubleWrite;

/**
 * 125. 验证回文串
 * 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
 * <p>
 * 说明：本题中，我们将空字符串定义为有效的回文串。
 *
 * @author luolidong
 * @version 1.0
 * @create 2021-07-26 10:08
 */
public class L125 {
    public boolean isPalindrome(String s) {
        String s1 = s.toLowerCase();
        //左右指针
        int left = 0, right = s1.length() - 1;
        while (left < right) {
            //先过滤其他字符
            while (left < right && !isValid(s1.charAt(left))) {
                left++;
            }
            while (left < right && !isValid(s1.charAt(right))) {
                right--;
            }
            if (left <= right && s1.charAt(left) == s1.charAt(right)) {
                left++;
                right--;
            } else {
                return false;
            }
        }
        return true;

    }

    //只考虑字母和数字字符
    private boolean isValid(char c) {
        return (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9');
    }
}
